Chomu's Blog.

>

Posts

GitHub

Webhook으로 GitHub Actions 발동시키기

Webhook을 통해 GitHub Actions를 발동시키는 방법을 알아보자.
또 이를 이용해 블로그 글이 저장된 저장소에서 Push가 발생하면 블로그 저장소의 빌드 및 배포 Actions를 발동시키는 방법도 알아보자.

목차

repository_dispatch 트리거

repository_dispatch 트리거 설정

repository_dispatch 트리거는 저장소의 dispath 이벤트로 발동되는 트리거이다. 이 트리거를 설정하면 Webhook으로 GitHub Actions를 실행시킬 수 있다.

name: Webhook 으로 Actions 실행시키기
 
on:
  repository_dispatch:
    types: [< 이벤트 타입 1 >, < 이벤트 타입 2 >, ...]

이 때 이벤트 타입 이름은 이 해당 Webhook 이벤트를 잘 구분할 수 있도록 설정하면 된다.

dispath 이벤트 발동시키기

이제 저장소에 dispatch 이벤트를 발동시키면 위에서 설정한 Actions가 실행된다. 이를 발동시키려면 POST /repos/< 저장소 소유자 >/< 저장소 이름 >/dispatches API를 사용하면 된다.
curl 명령어로는 다음과 같이 사용할 수 있다.

curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer < GitHub PAT >" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/2chanhaeng/2chanhaeng.github.io/dispatches \
-d "{\"event_type\": \"< 위에서 설정한 이벤트 타입 값 중 하나 >\"}"

event_type에는 위에서 설정한 이벤트 타입 값 중 하나를 넣어주면 된다.
GitHub PAT 에는 해당 저장소에 contents:write 권한이 있어야 한다.
PAT 를 생성할 때 권한을 잘 설정해주자.
해당 명령어를 실행하면 저장소에 dispatch 이벤트가 발동되어 위에서 설정한 Actions가 실행될 것이다.

블로그 저장소의 빌드 및 배포 Actions 발동시키기

이제 블로그 글이 저장된 저장소의 main 브랜치에서 push가 발생하면 블로그 저장소의 빌드 및 배포 Actions를 발동시키는 방법을 알아보자.
블로그 저장소에는 이미 배포 Actions가 설정되어 있다고 가정하자.
해당 Actions에 repository_dispatch 트리거를 설정하자.

...
on:
  push:
    branches:
      - main
  repository_dispatch:
    types: [blog-post]
...

그리고 블로그 글 저장소에 .github/workflows/dispatch.yml 파일을 생성하고 다음과 같이 작성한 뒤 push하자.

name: Webhook 으로 Actions 실행시키기
 
on:
  push:
    branches:
      - main
 
jobs:
  trigger:
    runs-on: ubuntu-latest
    steps:
      - name: Trigger Workflow in Another Repository
        run: |
          # 변수를 알맞게 설정하시오.
          repo_owner="< 저장소 소유자 >"
          repo_name="< 저장소 이름 >"
          event_type="blog-post"
 
          curl -L \
          -X POST \
          -H "Accept: application/vnd.github+json" \
          -H "Authorization: Bearer ${{ secrets.pat }}" \
          -H "X-GitHub-Api-Version: 2022-11-28" \
          https://api.github.com/repos/$repo_owner/$repo_name/dispatches \
          -d "{\"event_type\": \"$event_type\"}"

여기서 < 저장소 이름 > 에는 블로그 저장소의 이름이 들어가야 한다.
만약 해당 Action 이 실행돼도 블로그 저장소 배포가 되지 않는다면 < 저장소 이름 >에 글이 저장된 저장소의 이름이 들어간 건 아닌지 확인해보자. 문제가 없다면 해당 workflow 파일이 추가된 push 이후 블로그 글 저장소의 main 브랜치에 push가 발생하면 블로그 저장소의 배포 Actions가 실행될 것이다.